package com.aiwu.utils

import com.aiwu.library.App
import com.aiwu.library.util.IOUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.io.File

/**
 * 初始化文件的工具类
 */
object InitFileUtil {
    /**
     * 初始化爱吾的文件
     */
    fun init25Files() {
        GlobalScope.launch(Dispatchers.IO) {
            installAesKeys()
            installMii()
            initDefaultFont()
        }
    }

    /**
     * 安装密钥
     */
    private fun installAesKeys() {
        IOUtil.copyAssetFile2Out("aes_keys.txt", CitraUtil.getAesKeysDirPath(), false)
    }

    /**
     * 安装Mii文件
     */
    private fun installMii() {
        //Mii是否解压过的标志文件
        val miiFlagFile = File(CitraUtil.getEmuRootDirFile(), "MiiFlag.txt")
        //已经安装了就不安装了
        if (miiFlagFile.exists()) {
            return
        }
        try {
            //把Mii.zip复制到sd卡
            val sdMiiZipPath = IOUtil.copyAssetFile2Out(
                "Mii.zip",
                App.getContext().externalCacheDir!!.absolutePath,
                true
            ) ?: return//复制出错了
            //解压缩Mii.zip
            IOUtil.unzipFile(sdMiiZipPath, CitraUtil.getEmuRootDirFile().absolutePath, true)
            //删除Mii.zip
            IOUtil.delete(sdMiiZipPath)
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    /**
     * 初始化默认字体
     */
    private fun initDefaultFont() {
        if (PrefsHelper.instance.isInitDefaultFont()) {
            //已经设置过了
            return
        }
        if (changeFont(true)) {
            PrefsHelper.instance.run {
                setInitDefaultFont(true)
                setAcgFont(true)
            }
        }
    }

    /**
     * 切换字库
     * @param isAcgFont 是否acg字体
     * @return 是否切换成功
     */
    fun changeFont(isAcgFont: Boolean): Boolean {
        val fontName = if (isAcgFont) "Font_ACG.zip" else "Font_INIT.zip"
        try {
            //把zip复制到sd卡
            val sdZipPath = IOUtil.copyAssetFile2Out(
                fontName,
                App.getContext().externalCacheDir!!.absolutePath,
                true
            ) ?: return false //复制出错了
            //解压缩zip
            IOUtil.unzipFile(sdZipPath, CitraUtil.getEmuRootDirFile().absolutePath, true)
            //删除zip
            IOUtil.delete(sdZipPath)
        } catch (e: Exception) {
            e.printStackTrace()
            return false
        }
        return true
    }
}